import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import pygal
from pygal.style import CleanStyle
def main(start=16,end=24):
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签SimHei
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

    data = pd.read_csv('可视化数据/习题知识点关联.csv', header=None)
    knowledge = data.iloc[:, 0]
    knowledge.astype(int)
    k = knowledge
    k = [int(i + 1) for i in k]

    # ''' 热力图 '''
    # data = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[:, start:end]
    # q = pd.read_csv('可视化数据/学生1的答题序列（习题和答案）.csv', header=None,).iloc[0,:].astype(np.int).tolist()
    # a = pd.read_csv('可视化数据/学生1的答题序列（习题和答案）.csv', header=None).iloc[1, start:end].astype(np.int).tolist()
    #
    # # 坐标轴刻度
    # y = [1, 2, 3, 4, 5]
    # x = [(i, q[i], k[i], a[i]) for i in range(start, end)]
    #
    # plt.figure(figsize=(15, 3), dpi=600)
    # plt.yticks(rotation=30)
    #
    # # 色系 YlGnBu Blues
    # ax = sns.heatmap(data, cmap="Blues", xticklabels=x[start:end], linewidth=0)
    # ax.set_xlabel('练习序列')
    # ax.set_ylabel('知识点')
    #
    # ax.set_xticklabels(x[start:end], fontproperties="DejaVu Sans", fontsize=8, rotation=60)
    # ax.set_yticklabels(y, fontproperties="DejaVu Sans", fontsize=8, rotation=0)
    #
    # # plt.savefig('knowledge tracing.jpg',bbox_inches='tight')
    # plt.savefig("static/assets/analysis/knowledge_tracing_heatmap2.svg", dpi=600, bbox_inches='tight')  # 无边框
    #
    # plt.clf()#清空画图
    # plt.figure(figsize=(10, 6), dpi=600)
    # ''' 折线图 '''
    # x = [i for i in range(start, end)]
    # y1 = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[0, start:end]
    # y2 = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[1, start:end]
    # y3 = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[2, start:end]
    # y4 = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[3, start:end]
    # y5 = pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[4, start:end]
    # plt.title('知识状态曲线')  # 折线图标题
    # plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示汉字
    # plt.xlabel('时间')  # x轴标题
    # plt.ylabel('状态')  # y轴标题
    # plt.plot(x, y1, marker='o', markersize=3)  # 绘制折线图，添加数据点，设置点的大小
    # plt.plot(x, y2, marker='o', markersize=3)
    # plt.plot(x, y3, marker='o', markersize=3)
    # plt.plot(x, y4, marker='o', markersize=3)
    # plt.plot(x, y5, marker='o', markersize=3)
    # plt.legend(['知识点1', '知识点2', '知识点3', '知识点4', '知识点5'])  # 设置折线名称
    #
    # plt.savefig("knowledge_tracing_curve.svg", dpi=600, bbox_inches='tight')  # 无边框
    # plt.savefig("static/assets/analysis/knowledge_tracing_curve2.svg", dpi=600, bbox_inches='tight')  # 无边框
    #
    # plt.clf()  # 清空画图
    # plt.figure(figsize=(6, 6), dpi=600)

    ''' 雷达图 '''
    # 调用Radar这个类，并设置雷达图的填充，及数据范围
    min = data.min().min()
    max = data.max().max()
    radar_chart = pygal.Radar(fill=True, range=(0.48, 0.6))
    # 添加雷达图的标题和各顶点的含义
    radar_chart.title = '练习前后学生状态表现'
    radar_chart.x_labels = ['知识点1：类与对象', '知识点2：函数', '知识点3：语法基础', '知识点4：运算符和表达式', '知识点5：算法']

    # 绘制两条雷达图区域
    radar_chart.add('T=0', round(pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[:, 0], 3))
    radar_chart.add('T=29', round(pd.read_csv('可视化数据/学生1的答题数据.csv', header=None).iloc[:, 29], 3))

    # 保存图像
    radar_chart.render_to_file('static/assets/analysis/radar_chart_51.svg')

    plt.clf()#清空画图



if __name__ == "__main__":
    main()



